package com.example.controller;

import com.example.pojo.Result;
import com.example.pojo.ThreeList;
import com.example.pojo.controlPlanPojo;
import com.example.pojo.controlTestingPojo;
import com.example.service.controlPlanService;
import com.example.service.controlTestingService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * ClassName:controlPlanController
 * Description:
 *
 * @Author 赵永峰
 * @Create 2024/5/23 15:17
 * @Version 1.0
 */
@RestController
@Slf4j
public class controlPlanController {
    @Autowired
    private controlPlanService controlPlanService;
    @Autowired
    private controlTestingService controlTestingService;
    //页面加载的时候，刷新页面的导航栏数据
    @PostMapping("controlPlanTreeList")
    public Result controlPlanTreeList(){
        List<ThreeList> threeLists=controlPlanService.controlPlanTreeList();
        return Result.success(threeLists);
    }
    //点击树形结构，将所有的工序数据筛选出来返回到前端。
    @PostMapping("controlPlanList")
    public Result controlPlanList(@RequestBody controlPlanPojo controlPlanPojo){
        //筛选列表
        List<controlPlanPojo> controlPlanPojoList=controlPlanService.controlPlanList(controlPlanPojo);
        return Result.success(controlPlanPojoList);
    }

    /*更改后的新版控制计划数据库的函数*/
    //根据三个字段查询所有数据：现在用在了根据工序号、发动机图号、车间名称进行查询。利用的是模糊查询。
    @PostMapping("/inquiryControlPlanByOp")
    public Result inquiryControlPlanByOp(@RequestBody Map<String,Object> parameters){
        List<controlPlanPojo> controlPlanPojoList= controlPlanService.inquiryControlPlanByOp(parameters);
        return Result.success(controlPlanPojoList);
    }
    //在新建的工序，什么也没有的时候，插入一行新的数据
    @PostMapping("controlPlanVoidInsert")
    public Result controlPlanVoidInsert(@RequestBody controlPlanPojo controlPlan){
        controlPlanService.controlPlanVoidInsert(controlPlan);
        return Result.success("保存成功");
    }
    //根据ID，修改一行的值
    @PutMapping("/controlPlanVoidPut")
    public Result controlPlanVoidPut(@RequestBody controlPlanPojo controlPlanPojo){
        //保存数据
        controlPlanService.controlPlanVoidPut(controlPlanPojo);
        //保存完成后，查询数据
        List<controlPlanPojo> controlPlanPojoList=controlPlanService.controlPlanList(controlPlanPojo);
        return Result.success(controlPlanPojoList);
    }
    //接收前端传来的数据，进行插入操作
    @PostMapping("/controlPlanInsert")
    public Result controlPlanInsert(@RequestBody List<controlPlanPojo> controlPlanPojoList){
        //对数据进行操作，首先判断到ID等于null的，进行插入操作，随后对变化的进行重新写入，就写入一个字段，就是顺序号
        //找到插入数据的位置
        int nullIndxe=0;
        for (int i = 0; i < controlPlanPojoList.size(); i++) {
            if (controlPlanPojoList.get(i).getId()==null){
                nullIndxe=i;
                //把这一行插入到数据库中。
                controlPlanService.controlPlanVoidInsert(controlPlanPojoList.get(i));
            }
        }
        //对后续的变化，根据id，进行修改，其中不同的就是顺序号
        for (int i = nullIndxe+1; i < controlPlanPojoList.size(); i++) {
            controlPlanService.controlPlanVoidPut(controlPlanPojoList.get(i));
        }
        //重新查询数据，给前端用
        List<controlPlanPojo> controlPlanPojoUse=controlPlanService.controlPlanList(controlPlanPojoList.get(0));
        return Result.success(controlPlanPojoUse);
    }
    //给控制计划管理页面查询“频次检测”的信息
    @PostMapping("/controlTestingListByclickId")
    public Result controlTestingListByclickId(@RequestBody controlTestingPojo controlTesting){
        List<controlTestingPojo> controlTestingPojoList=controlTestingService.controlByclickId(controlTesting);
        return Result.success(controlTestingPojoList);
    }
    //修改“频次检测“中的内容
    @PutMapping("/putControlTesting")
    public Result putControlTesting(@RequestBody controlTestingPojo controlTestingPojo){
        //修改数据
        controlTestingService.putById(controlTestingPojo);
        //修改控制计划中的“频次检验标记位”变为1
        //根据ID修改“控制计划”标记为的值，传递ID、修改值
        controlPlanService.putTestingById(controlTestingPojo.getControlTesting());
        //把修改的数据再次查出来，反馈给前端
        List<controlTestingPojo> controlTestingPojoList=controlTestingService.controlByclickId(controlTestingPojo);
        return Result.success(controlTestingPojoList);
    }
    //接收到前端的向下插入或者向上插入指令，开始向数据库中插入，接收到的是一个List,编辑的是频次检测内的内容
    @PostMapping("/controlTestingInsertC")
    public Result controlTestingInsertC(@RequestBody List<controlTestingPojo> controlTestingPojoList){
        //修改数据，把原来的数据更新，把新数据加入
        controlTestingService.controlTestingInsertC(controlTestingPojoList);
        //修改控制计划中的“频次检验标记位”变为1
        //根据ID修改“控制计划”标记为的值，传递ID、修改值
        controlPlanService.putTestingById(controlTestingPojoList.get(0).getControlTesting());
        //把修改的数据再次查出来，反馈给前端
        List<controlTestingPojo> controlTestingPojoListNew=controlTestingService.controlByclickId(controlTestingPojoList.get(0));
        return Result.success(controlTestingPojoListNew);
    }
}